package Transpoint

import (
	"context"
	"encoding/json"
	"errors"
	"fmt"
	Endpoint2 "go-kit/demo12/Endpoint"
	"go-kit/demo12/Endpoint"
	"net/http"
	"strconv"
)

//接收参数对参数进行处理
func DecodeUserTransport(c context.Context, r *http.Request) (interface{}, error) {

	//获取uid 参数
	//uid := r.URL.Query().Get("uid")

	//普通的post表单请求，Content-Type=application/x-www-form-urlencoded
	//这个方法同样 可以获取 Content-Type=multipart/form-data 的参数 但是无法上传文件的内容

	uid := r.PostFormValue("uid")

	//有文件上传的表单，Content-Type=multipart/form-data 也无法获得对应 file 的内容应该是语法不对 留到后期在学习
	//应该是指定from 可用内存
	//r.ParseMultipartForm(100)
	//获取对应数据
	//uid := r.MultipartForm.Value["uid"][0]

	//param := mux.Vars(r)

	fmt.Println(uid)

	//如果 uid 不等于空 则对 请求结构进行赋值
	if uid != "" {
		//把 字符串转整数
		IntUid, _ := strconv.Atoi(uid)
		//调用
		return Endpoint2.UserRequest{Uid: IntUid, Method: r.Method}, nil
	}

	//参数错误直接返回
	return nil, errors.New("参数错误")

}

//返回结果 处理
func EncodeUserTransport(c context.Context, w http.ResponseWriter, response interface{}) error {

	//设置响应格式为json，这样客户端接收到的值就是json，就是把我们设置的UserResponse给json化了
	w.Header().Set("Content-type", "application/json")

	return json.NewEncoder(w).Encode(response)

}

func GetUserInfoRequest(_ context.Context, request *http.Request, r interface{}) error {

	userRequest := r.(Endpoint.UserRequest)

	request.URL.Path += "/user/" + strconv.Itoa(userRequest.Uid)

	return nil

}

func GetUserInfoResponse(_ context.Context, res *http.Response) (response interface{}, err error) {


	fmt.Println(res.StatusCode)

	if res.StatusCode > 400 {

		return nil, errors.New("没数据了")

	}

	var userResponse Endpoint.UserResponse

	err = json.NewDecoder(res.Body).Decode(&userResponse)

	if err != nil {

		return nil, err
	}

	return userResponse, err

}
